﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Node
{
    public int val;
    public Node left;
    public Node right;
    public Node next;

    public Node() { }

    public Node(int _val)
    {
        val = _val;
    }
}
namespace text.Tree
{
    //struct Node
    //{
    //    int val;
    //    Node* left;
    //    Node* right;
    //    Node* next;
    //}
    //填充它的每个 next 指针，让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点，则将 next 指针设置为 NULL。

    //初始状态下，所有 next 指针都被设置为 NULL。

    public class _117
    {
        public Node Connect(Node root)
        {
            if (root == null)  return root;
            if (root.left!=null&&root.right!=null)//如果当前左边的第一个兄弟有的话就复制
            {
                root.left.next = root.right;
            }
            if (root.left!=null&&root.right==null)//如果当前左边的兄弟元素没有的话就去再往右去找
            {
                root.left.next = getNext(root.next);
            }
            if (root.right != null)//这一个是给右边的子树 赋值
            {
                root.right.next = getNext(root.next);
            }
            Connect(root.right);
            Connect(root.left);
            return root;
        }
        public Node getNext(Node root)
        {
            if (root == null) return null;
            if (root.left != null) return root.left;
            if (root.right != null) return root.right;
            else return getNext(root.next);
        }
    }
}
